#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int n,m,s,w[100];
vector<int> child[100],tempAns;
vector<vector<int>> ans;

void dfs(int root,int sum){
    tempAns.push_back(w[root]);
    if(sum==s&&child[root].empty()){
        ans.push_back(tempAns);
        tempAns.pop_back();
        return;
    }
    for(int i=child[root].size()-1;i>=0;i--){
        if(sum+w[child[root][i]]<=s)
            dfs(child[root][i],sum+w[child[root][i]]);
    }
    tempAns.pop_back();
}

int cmp(vector<int> &v1,vector<int> &v2){
    for(int i=0;i<v1.size()&&i<v2.size();i++){
        if(v1[i]==v2[i])    continue;
        return v1[i]>v2[i];
    }
    return v1[0]>v2[0];
}

signed main()
{
    cin>>n>>m>>s;
    for(int i=0;i<n;i++)    cin>>w[i];
    int vis[100] = {0},root;
    for(int i=0;i<m;i++){
        int p,k,c;
        cin>>p>>k;
        for(int j=0;j<k;j++){
            cin>>c;
            child[p].push_back(c);
            vis[c] = 1;
        }
    }
    for(int i=0;i<n;i++)    if(vis[i]==0)    root = i;
    dfs(root,w[root]);
    sort(ans.begin(),ans.end(),cmp);
    for(int i=0;i<ans.size();i++){
        cout<<ans[i][0];
        for(int j=1;j<ans[i].size();j++)    cout<<" "<<ans[i][j];
        cout<<"\n";
    }
    return 0;
}
